//
//  LZMeViewController.m
//  LZHundredJie
//
//  Created by apple on 16/3/27.
//  Copyright © 2016年 m14a.cn. All rights reserved.
//

#import "LZMeViewController.h"
#import "LZSettingViewController.h"
#import "LZSquareCell.h"
#import "LZSquareItem.h"
//#import <SafariServices/SafariServices.h>
#import "LZWebViewController.h"

#import <MJExtension/MJExtension.h>

CGFloat const margin = 1;
NSInteger const cols = 4;

#define itemWH ((ScreenW - (cols - 1) * margin) / cols)

@interface LZMeViewController () <UICollectionViewDataSource, UICollectionViewDelegate>

/** 模型数组*/
@property (nonatomic, strong) NSMutableArray *squares;

/** collectionView对象*/
@property (nonatomic, weak) UICollectionView *collectionView;

@end

@implementation LZMeViewController

#pragma mark - 懒加载数组
//- (NSMutableArray *)squares
//{
//    if (_squares == nil) {
//        _squares = [NSMutableArray array];
//    }
//    return _squares;
//}

static NSString * const ID = @"cell";

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    // 设置导航条内容
    [self setupNavBar];
    
    // 设置footView
    [self setupFootView];
    
    // 加载数据
    [self loadData];
    
    // 取消间距
    self.tableView.sectionHeaderHeight = 0;
    self.tableView.sectionFooterHeight = 10;
    self.tableView.contentInset = UIEdgeInsetsMake(LZMargin - 35, 0, 0, 0);
    
}

// 处理数据
/**
 *   要干啥，判断,对4进行取模，比如8对4取模为0，不需要额外添加空白的
 9对4取模为1,需要添加 4 - 1 = 3 个空白的
 */
- (void)resolveData
{
    // 1.获取目前总共的个数
    NSInteger count = self.squares.count;
    // 2.对4进行取模
    NSInteger modCount = count % 4;
    if (modCount) { // 不为0,说明取值为1,2,3
        // 3.需要添加的空白的个数
        NSInteger leftCount = cols -  modCount;
        // 4.for循环,空白的表示的是添加的是空的模型,这样显示才是空白的
        for (NSInteger i = 0; i < leftCount; i++) {
            LZSquareItem *item = [[LZSquareItem alloc] init];
            [self.squares addObject:item];
        }
    }
}

#pragma mark - 加载数据
// icon,name,url
- (void)loadData
{
    // 1.创建可变字典
    NSMutableDictionary *parmas = [NSMutableDictionary dictionary];
    parmas[@"a"] = @"square";
    parmas[@"c"] = @"topic";
    // 2.发送请求
    [LZHttpTool get:@"http://api.budejie.com/api/api_open.php" params:parmas success:^(id responseObj) {
        // 字典数组转模型数组
        self.squares = [LZSquareItem mj_objectArrayWithKeyValuesArray:responseObj[@"square_list"]];
        
        // 处理数据,经过这个方法之后，数据的个数都会是cols的整数倍
        [self resolveData];
        
        // 刷新数据
        [self.collectionView reloadData];
        
        // 计算高度 = 多少行 * 行高
        // 1.计算多少行 = 总个数 / 每行的个数
        // 1.求总个数
        NSInteger count = self.squares.count;
        // 2.求行数
        NSInteger rows = (count + cols - 1) / cols;
        // 3.求高度,注意:这里一定要加上(rows - 1) * margin,不然后果很严重
        NSInteger collectionViewH = itemWH * rows + (rows - 1) * margin;
        // 4.设置_collectionView尺寸也就是高度
//        _collectionView.frame = CGRectMake(0, 0, 0, collectionViewH);
        // 设置tableView滚动范围 => tableView滚动范围是系统会自动根据内容去计算
        self.collectionView.height = collectionViewH;
        // 5.赋值给tableView
        self.tableView.tableFooterView = self.collectionView;
        // 6.重新刷新表格，计算新的高度
        [self.tableView reloadData];
        
    } failure:^(NSError *error) {
        
    }];
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    // 打印值{64, 0, 49, 0}
//    LZLog(@"%@", NSStringFromUIEdgeInsets(self.tableView.contentInset));
    // 设置self.tableView.contentInset = UIEdgeInsetsMake(-25, 0, 0, 0);
    // 之后，打印值是{39, 0, 49, 0}
}

#pragma mark - UICollectionViewDataSource方法
// 每组返回多少个格子
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return self.squares.count;
}

// 每个格子如何显示
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    // 1.去缓存里面取
    LZSquareCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:ID forIndexPath:indexPath];
    // 2.赋值
    cell.item = self.squares[indexPath.row];
    // 3.返回
    return cell;
}

#pragma mark - UICollectionViewDelegate方法
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    // 1.拿到选中的cell的模型
    LZSquareItem *item = self.squares[indexPath.row];
    
    if (![item.url containsString:@"http"]) // 如果不包含http,就直接return
        return;
    
    NSURL *url = [NSURL URLWithString:item.url];
    // 2.创建webViewVC对象
    // WKWebView:UIWebView升级版,监听进度条,数据缓存,iOS8才有
    LZWebViewController *webViewVC = [[LZWebViewController alloc] init];
    webViewVC.url = url;
    [self.navigationController pushViewController:webViewVC animated:YES];
    /*
    // iOS9才有的
//    SFSafariViewController *sfVC = [[SFSafariViewController alloc] initWithURL:url];
    // modal出一个控制器
//    [self presentViewController:sfVC animated:YES completion:nil];
     */
}

#pragma mark - 设置footView方法
- (void)setupFootView
{
    // 1.创建流水布局
    UICollectionViewFlowLayout *flowL = [[UICollectionViewFlowLayout alloc] init];

    flowL.itemSize = CGSizeMake(itemWH, itemWH);
    flowL.minimumInteritemSpacing = margin;
    flowL.minimumLineSpacing = margin;
    
    // 2.创建collectionView
    // 之前这里赋值的高度是300,后面因为一进入这个界面出现一个黑黑的面板
    // 所以,把高度设置为0了
    UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, 0, 0) collectionViewLayout:flowL];
    collectionView.backgroundColor = LZGlobalBg;
    // 默认这个属性赋值为YES
    collectionView.scrollsToTop = NO;
    // 3.设置代理
    collectionView.dataSource = self;
    collectionView.delegate = self;
    // 注册方法
    [collectionView registerNib:[UINib nibWithNibName:NSStringFromClass([LZSquareCell class]) bundle:nil] forCellWithReuseIdentifier:ID];
  
    self.tableView.tableFooterView = collectionView;
    _collectionView = collectionView;
}


// 设置导航条内容
- (void)setupNavBar
{
    // 设置导航栏标题
    self.navigationItem.title = @"我的";
    /** UIBarButtonItem和UIButton不是同一个类?为什么可以传按钮*/
    UIBarButtonItem *moonItem = [UIBarButtonItem itemWithTarget:self action:@selector(moonClick:) image:@"mine-moon-icon" selImage:@"mine-moon-icon-click"];
    UIBarButtonItem *settingItem = [UIBarButtonItem itemWithTarget:self action:@selector(settingClick) image:@"mine-setting-icon" highImage:@"mine-setting-icon-click"];
    
    self.navigationItem.rightBarButtonItems = @[settingItem, moonItem];
}

- (void)settingClick
{
    LZSettingViewController *settingVC = [[LZSettingViewController alloc] init];
    [self.navigationController pushViewController:settingVC animated:YES];
}
- (void)moonClick:(UIButton *)button
{
    button.selected = !button.selected;
}


@end
